package com.chen.utils.params;


import com.baomidou.mybatisplus.generator.fill.Column;
import com.chen.root.annotation.DefaultValue;
import com.chen.root.enums.DriveEnum;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.List;

/**
 * @author: ~龙~
 * @date: 2023/6/27 17:03
 **/
@Data
@Accessors(chain = true)
public class GenerateCodeParam implements Serializable {

    /**
     * 数据源类型：mysql、oracle
     * {@link DriveEnum}
     */
    @NotBlank(message = "dataType-不能为空")
    @ApiModelProperty("数据源类型：mysql、oracle")
    private String dataType;

    /**
     * 数据库连接地址，ip:端口 即可
     * 如：127.0.0.1:3306
     */
    @NotBlank(message = "url-不能为空")
    @ApiModelProperty("数据库连接地址，ip:端口 即可")
    private String url;

    /**
     * 数据库名
     */
    @NotBlank(message = "libraryName-不能为空")
    @ApiModelProperty("数据库名")
    private String libraryName;

    /**
     * 数据库账号
     */
    @NotBlank(message = "username-不能为空")
    @ApiModelProperty("数据库账号")
    private String username;

    /**
     * 数据库密码
     */
    @NotBlank(message = "password-不能为空")
    @ApiModelProperty("数据库密码")
    private String password;

    /**
     * 作者
     */
    @DefaultValue("author")
    @ApiModelProperty("作者")
    private String author;

    /**
     * 表名集
     */
    @NotEmpty
    @NotNull(message = "tableNameList-不能为空")
    @ApiModelProperty("表名集")
    private List<String> tableNameList;

    /**
     * 文件包名
     */
    @DefaultValue("com")
    @ApiModelProperty("文件包名")
    private String parentPath;

    /**
     * 忽略的前缀集
     */
    @ApiModelProperty("忽略的前缀集")
    private List<String> ignoreTablePrefixs;

    /**
     * 是否开启Swagger，默认false -> 不开启
     */
    @DefaultValue("false")
    @ApiModelProperty("是否开启Swagger")
    private Boolean enableSwagger;

    /**
     * Mapper类的父类全限定名
     * 如：com.chen.common.mybatis.scope.ProBaseMapper
     */
    @DefaultValue("com.baomidou.mybatisplus.core.mapper.BaseMapper")
    @ApiModelProperty("Mapper类的父类全限定名")
    private String superMapperClass;

    /**
     * 逻辑删除的列名，默认：del_flag
     */
    @DefaultValue("del_flag")
    @ApiModelProperty("逻辑删除的列名")
    private String logicDeleteColumnName;

    /**
     * 乐观锁的列名，默认：revision
     */
    @DefaultValue("revision")
    @ApiModelProperty("乐观锁的列名")
    private String versionColumnName;

    /**
     * 列标注
     * 如：new Column("tenant_id", FieldFill.INSERT)
     */
    @ApiModelProperty("列标注")
    private List<Column> addTableFills;

    /**
     * 是否开启Lombok，默认false -> 不开启
     */
    @DefaultValue("false")
    @ApiModelProperty("是否开启Lombok")
    private Boolean enableLombok;

    /**
     * service 实现类父类
     */
    @ApiModelProperty("service 实现类父类")
    private String superServiceImplClass;

    /**
     * Entity包名
     */
    @ApiModelProperty("Entity包名")
    private String entityPack;

    /**
     * Service包名
     */
    @DefaultValue("service.inter")
    @ApiModelProperty("Service包名")
    private String servicePack;

    /**
     * ServiceImpl包名
     */
    @DefaultValue("service.impl")
    @ApiModelProperty("ServiceImpl包名")
    private String serviceImplPack;

    /**
     * Mapper包名
     */
    @ApiModelProperty("Mapper包名")
    private String mapperPack;

    /**
     * Boolean字段移除is前缀
     */
    @ApiModelProperty("Boolean字段移除is前缀")
    private Boolean ignoreBooleanPrefix;
}
